package com.github.mobile.ui;
import static com.github.mobile.ui.NavigationDrawerObject.TYPE_SEPERATOR;
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import com.github.mobile.R;
import com.github.mobile.accounts.AccountUtils;
import com.github.mobile.core.user.UserComparator;
import com.github.mobile.persistence.AccountDataManager;
import com.github.mobile.ui.gist.GistsPagerFragment;
import com.github.mobile.ui.issue.FilterListFragment;
import com.github.mobile.ui.issue.IssueDashboardPagerFragment;
import com.github.mobile.ui.repo.OrganizationLoader;
import com.github.mobile.ui.user.HomePagerFragment;
import com.github.mobile.util.AvatarLoader;
import com.google.inject.Inject;
import com.google.inject.Provider;
import java.util.Collections;
import java.util.List;
import org.eclipse.egit.github.core.User;
public class MainActivity extends BaseActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks,
LoaderManager.LoaderCallbacks<List<User>> {
private static final String TAG = "MainActivity";
private NavigationDrawerFragment mNavigationDrawerFragment;
@Inject
private AccountDataManager accountDataManager;
@Inject
private Provider<UserComparator> userComparatorProvider;
private List<User> orgs = Collections.emptyList();
private NavigationDrawerAdapter navigationAdapter;
private User org;
@Inject
private AvatarLoader avatars;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar((android.support.v7.widget.Toolbar) findViewById(R.id.toolbar));
getSupportLoaderManager().initLoader(0, null, this);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
}
private void reloadOrgs() {
getSupportLoaderManager().restartLoader(0, null, this);
}
@Override
public boolean onCreateOptionsMenu(Menu optionMenu) {
getMenuInflater().inflate(R.menu.home, optionMenu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = optionMenu.findItem(R.id.m_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(optionMenu);
}
@Override
protected void onResume() {
super.onResume();
// Restart loader if default account doesn't match currently loaded
// account
List<User> currentOrgs = orgs;
if (currentOrgs != null && !currentOrgs.isEmpty()
&& !AccountUtils.isUser(this, currentOrgs.get(0)))
reloadOrgs();
}
@Override
public Loader<List<User>> onCreateLoader(int i, Bundle bundle) {
return new OrganizationLoader(this, accountDataManager,
userComparatorProvider);
}
@Override
public void onLoadFinished(Loader<List<User>> listLoader, final List<User> orgs) {
if (orgs.isEmpty())
return;
org = orgs.get(0);
this.orgs = orgs;
if (navigationAdapter != null)
navigationAdapter.setOrgs(orgs);
else {
navigationAdapter = new NavigationDrawerAdapter(MainActivity.this, orgs, avatars);
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout), navigationAdapter, avatars, org);
Window window = getWindow();
if (window == null)
return;
View view = window.getDecorView();
if (view == null)
return;
view.post(new Runnable() {
@Override
public void run() {
MainActivity.this.onNavigationDrawerItemSelected(0);
}
});
}
}
@Override
public void onLoaderReset(Loader<List<User>> listLoader) {
}
@Override
public void onNavigationDrawerItemSelected(int position) {
if (navigationAdapter.getItem(position).getType() == TYPE_SEPERATOR)
return;
Fragment fragmet;
Bundle args = new Bundle();
switch (position) {
case 0:
fragmet = new HomePagerFragment();
args.putSerializable("org", org);
break;
case 1:
fragmet = new GistsPagerFragment();
break;
case 2:
fragmet = new IssueDashboardPagerFragment();
break;
case 3:
fragmet = new FilterListFragment();
break;
default:
fragmet = new HomePagerFragment();
args.putSerializable("org", orgs.get(position - 5));
break;
}
fragmet.setArguments(args);
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.container, fragmet).commit();
}
}